home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / pascal / psgui130.zip / PGUIBMSE.PAS < prev    next >
Pascal/Delphi Source File  |  1993-01-01  |  4KB  |  195 lines

  1. {
  2.  
  3.                                                       ╔══════════════════╗
  4.                                                       ║  PGUI BGI        ║
  5.                                                       ║  Mouse Unit      ║
  6.                                                       ║    Rev.  1.00    ║
  7.                                                       ╚══════════════════╝
  8.  
  9. }
  10.  
  11. Unit PGUIBMSE;
  12.  
  13. {$F+} {$O-} {$A+} {$G+}
  14. {$V-} {$B-} {$X-} {$N+} {$E+}
  15.  
  16. {$I FINAL.PAS}
  17.  
  18. {$IFDEF FINAL}
  19.   {$I-} {$R-}
  20.   {$D-} {$L-} {$S-}
  21. {$ENDIF}
  22.  
  23. Interface
  24.  
  25. Uses Graph,PGUIMDef,Icons;
  26.  
  27. Var
  28.   MouseX,
  29.   MouseY,
  30.   MouseSizeX,
  31.   MouseSizeY,
  32.   MouseMaxX,
  33.   MouseMaxY             :Word;
  34.   MouseBackgroundSize   :Word;
  35.   MousePicture,
  36.   MouseMask,
  37.   MouseBackgroundSave,
  38.   MouseDefaultPicture,
  39.   MouseDefaultMask      :Pointer;
  40.   MouseHideCount        :Byte;          {255 is Show}
  41.   OldExitProc           :Pointer;
  42.  
  43. Procedure ControlMouse;
  44. Procedure Show;
  45. Procedure Hide;
  46. Procedure SetXY          (X,Y:Word);
  47. Procedure SetBounds      (X1,Y1,X2,Y2:Word);
  48. Procedure SetShape       (Shape:Pointer);
  49.  
  50. Implementation
  51.  
  52. Var
  53.   Busy  :Boolean;
  54.  
  55. {$S-}
  56. Procedure ControlMouse;
  57. Begin
  58.   Asm
  59.     pusha
  60.     push     ds
  61.     push     es
  62.     mov      ax, SEG @Data
  63.     mov      ds, ax
  64.   End;
  65.  
  66.   If Not Busy Then
  67.   Begin
  68.  
  69.     If MouseHideCount=255 Then
  70.     Begin
  71.       PutImage(MouseX,MouseY,MouseBackgroundSave^,CopyPut);
  72.       Asm
  73.         mov   ax, 3
  74.         int   33h
  75.         mov   MouseX, cx
  76.         mov   MouseY, dx
  77.       End;
  78.       GetImage(MouseX,MouseY,MouseX+MouseSizeX,MouseY+MouseSizeY,MouseBackgroundSave^);
  79.       PutImage(MouseX,MouseY,MouseMask^,AndPut);
  80.       PutImage(MouseX,MouseY,MousePicture^,OrPut);
  81.     End
  82.     Else
  83.     Asm
  84.       mov   ax, 3
  85.       int   33h
  86.       mov   MouseX, cx
  87.       mov   MouseY, dx
  88.     End;
  89.  
  90.   End;
  91.  
  92.   Asm
  93.     pop      es
  94.     pop      ds
  95.     popa
  96.   End;
  97. End;
  98. {$IFNDEF FINAL} {$S+} {$ENDIF}
  99.  
  100. Procedure Show;
  101. Begin
  102.   Busy:=True;
  103.   If MouseHideCount<255 Then
  104.   Begin
  105.     Inc(MouseHideCount);
  106.     If MouseHideCount=255 Then
  107.     Begin
  108.       GetImage(MouseX,MouseY,MouseX+MouseSizeX,MouseY+MouseSizeY,MouseBackgroundSave^);
  109.       PutImage(MouseX,MouseY,MouseMask^,AndPut);
  110.       PutImage(MouseX,MouseY,MousePicture^,OrPut);
  111.     End;
  112.   End;
  113.   Busy:=False;
  114. End;
  115.  
  116. Procedure Hide;
  117. Begin
  118.   Busy:=True;
  119.   If MouseHideCount=255 Then
  120.     PutImage(MouseX,MouseY,MouseBackgroundSave^,CopyPut);
  121.   If MouseHideCount>0 Then Dec(MouseHideCount);
  122.   Busy:=False;
  123. End;
  124.  
  125. Procedure SetXY(X,Y:Word);
  126. Begin
  127.   Hide;
  128.   Asm
  129.     mov  ax,4
  130.     mov  cx,X
  131.     mov  dx,Y
  132.     int  33h
  133.   End;
  134.   Show;
  135. End;
  136.  
  137. Procedure SetBounds(X1,Y1,X2,Y2:Word);
  138. Begin
  139.   Hide;
  140.   Asm
  141.     mov  ax,7
  142.     mov  cx,X1
  143.     mov  dx,X2
  144.     int  33h
  145.     mov  ax,8
  146.     mov  cx,Y1
  147.     mov  dx,Y2
  148.     int  33h
  149.   End;
  150.   Show;
  151. End;
  152.  
  153. Procedure SetShape(Shape:Pointer);
  154.  
  155. Var
  156.   P, Q      :Pointer;
  157.  
  158. Begin
  159.   Hide;
  160.   FreeMem(MouseBackgroundSave,ImageSize(0,0,MouseSizeX,MouseSizeY));
  161.  
  162.   If BGIMouseShapePtr(Shape)^.Picture=NIL Then
  163.     MousePicture :=MouseDefaultPicture
  164.   Else
  165.     MousePicture :=BGIMouseShapePtr(Shape)^.Picture;
  166.  
  167.   If BGIMouseShapePtr(Shape)^.Mask=NIL Then
  168.     MouseMask    :=MouseDefaultMask
  169.   Else
  170.     MouseMask    :=BGIMouseShapePtr(Shape)^.Mask;
  171.  
  172.   P              :=Ptr(Seg(MousePicture^),Ofs(MousePicture^)+0);
  173.   Q              :=Ptr(Seg(MouseMask^),Ofs(MouseMask^)+0);
  174.   MouseSizeX     :=Word(P^);
  175.   If Word(P^)<>Word(Q^) Then Halt;
  176.   P              :=Ptr(Seg(MousePicture^),Ofs(MousePicture^)+2);
  177.   Q              :=Ptr(Seg(MouseMask^),Ofs(MouseMask^)+2);
  178.   MouseSizeY     :=Word(P^);
  179.   If Word(P^)<>Word(Q^) Then Halt;
  180.   MouseBackgroundSize:=ImageSize(0,0,MouseSizeX,MouseSizeY);
  181.   GetMem(MouseBackgroundSave,MouseBackgroundSize);
  182.  
  183.   Show;
  184. End;
  185.  
  186. Begin
  187.   ComputerSpeed :=1000;
  188.   Active        :=False;
  189.   Busy          :=False;
  190.   MouseDefaultPicture :=@Icons.IconBGIMouseCursorA;
  191.   MouseDefaultMask    :=@Icons.IconBGIMouseMaskA;
  192. End.
  193.  
  194. { Copyright 1993, Michael Gallias }
  195.